// class Solution {
// public:
//     string minWindow(string s, string t) {
//        unordered_map<char,int> need;
//        unordered_map<char,int> window;
//        for(char a:t)
//        {
//         need[a]++;
//        } //统计t中字符个数

//        int l=0,start=0;
//        int count=0;
//        int length=INT_MAX;
       
//        for(int i=0;i<s.size();i++)
//        {
//         if(need.count(s[i]))
//         {
//             window[s[i]]++;
//         }
//         if(window[s[i]]==need[s[i]])
//         {
//             ++count;
//         }
        
//         while(count==t.size())
//         {
//             if(i-l<length)
//             {
//                 start=l;
//                 length=i-l+1;
//             }
//             if(need.count(s[l]))
//             {
//                 window[s[l]]--;
//             }
//             if(window[s[l]]<need[s[l]])
//             {
//                 count--;
//             }
//             l++;
//         }
        
//        }

//        return length==INT_MAX?"":s.substr(start,length);
//     }
// };

class Solution {
public:
    string minWindow(string s, string t) {
        unordered_map<char, int> need;
        unordered_map<char, int> window;
        for (char a : t) {
            need[a]++;
        } // 统计t中字符个数

        int l = 0, start = 0;
        int count = 0;
        int length = INT_MAX;

        for (int i = 0; i < s.size(); i++) {
            if (need.count(s[i])) {
                window[s[i]]++;
                if (window[s[i]] == need[s[i]]) {
                    ++count;
                }
            }

            while (count == need.size()) {
                if (i - l +1 < length) {
                    start = l;
                    length = i - l + 1;
                }
                if (need.count(s[l])) {
                    window[s[l]]--;
                    if (window[s[l]] < need[s[l]]) {
                        count--;
                    }
                }
                l++;
            }
        }

        return length == INT_MAX ? "" : s.substr(start, length);
    }
};